home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / prolog / brklyprl.lha / Comp / varlist.pl < prev    next >
Text File  |  1989-04-14  |  3KB  |  81 lines

  1.  
  2. /* Copyright (C) 1988, 1989 Herve' Touati, Aquarius Project, UC Berkeley */
  3.  
  4. /* Copyright Herve' Touati, Aquarius Project, UC Berkeley */
  5.  
  6. % Calculate from the unraveled source code
  7. % the varlist used for calculating lifetimes.
  8. % All goal arguments (variables & atoms) are simply listed.
  9. % For unify goals only the variables are listed.
  10. % Goal arguments are delimited by one or both of arity(Arity) and fence(Name).
  11. % This is determined as follows: 
  12. %     1. arity(Arity) allows tempalloc to do more optimal allocation.
  13. %       It comes before the arguments.
  14. %       It is generated for all goals, even built-ins (except unify,
  15. %       or goals with arity zero).
  16. %     2. fence(Name) is used in lifetime to kill temporaries.
  17. %       It comes after the arguments.
  18. %        It is not generated for built-ins or the head of the clause.
  19. %
  20. % 11/15/84:
  21. % Correction - last line of item 1 used to be:
  22. %
  23. %       or goals with arity zero, or if all arguments are nonvariable).
  24. %
  25. % This is incorrect because even nonvariable arguments will use registers,
  26. % so tempalloc will have to be made aware of them.
  27. % Fourth line of goalsvars used to be
  28. %    ((Arity=0;getvars(Args, []-[])) -> Vars=L; 
  29.  
  30. varlist([Head|RestCode], [arity(Arity)|Vars]) :-
  31.     Head=..[Name|Args],
  32.     my_length(Args, Arity),
  33.     linkify(Args, Vars-L),
  34.     xvarlist(RestCode, L-[]), !.
  35.  
  36. xvarlist([X|RestCode], [Dis|Vars]-Link) :-
  37.     X=(_;_),
  38.     dislist(X, Dis),
  39.     xvarlist(RestCode, Vars-Link).
  40. xvarlist([Goal|RestCode], Vars-Link) :-
  41.     goalsvars(Goal, Vars-L),
  42.     xvarlist(RestCode, L-Link).
  43. xvarlist([], Link-Link).
  44.  
  45. dislist((A;B), (AVars;BVars)) :-
  46.     xvarlist(A, AVars-[]),
  47.     dislist(B, BVars).
  48. dislist(B, BVars) :-
  49.     xvarlist(B, BVars-[]).
  50.  
  51. goalsvars(A=S, Vars_Link) :-
  52.     var(S), !,
  53.     getvars([A,S], Vars_Link).
  54. goalsvars(A=S, Vars_Link) :-
  55.     list(S), !,
  56.     getvars([A|S], Vars_Link).
  57. goalsvars(A=S, Vars_Link) :-
  58.     atom(S), !,
  59.     getvars([A], Vars_Link).
  60. goalsvars(A=S, Vars_Link) :-
  61.     S=..[_|SVars],
  62.     getvars([A|SVars], Vars_Link).
  63. goalsvars(Goal, Link-Link) :-
  64.     atom(Goal), escape_builtin(Goal,0), !.
  65. goalsvars(Goal, [fence(Name)|Link]-Link) :-
  66.     atom(Goal), !.
  67. % Added clause for VLSI PLM:
  68. % goalsvars(is(Out,A,Op,B), [arity(1)|Vars]-Link) :-
  69. %     compile_options(s),
  70. %     vlsi_instr(Op,_), !,
  71. %     getvars([A,B,Out], Vars-Link).
  72. goalsvars(Goal, [arity(Arity)|V]-Link) :-
  73.     Goal=..[Name|Args],
  74.     my_length(Args,Arity),
  75.     escape_builtin(Name,Arity), !,
  76.     linkify(Args, V-Link).
  77. goalsvars(Goal, [arity(Arity)|V]-Link) :-
  78.     Goal=..[Name|Args],
  79.     my_length(Args,Arity),
  80.     linkify(Args, V-[fence(Name)|Link]).
  81.